def max_subarray_sum(nums):
    """
    使用分治算法找出具有最大和的连续子数组。
    :param nums: 整数数组
    :return: 最大子数组和
    """
    #辅助函数，用于递归地找出最大子数组和
    def max_subarray_sum_recursive(nums, left, right):
        # 基本情况：如果子数组只包含一个元素
        if left == right:
            return nums[left]

        # 计算中间位置
        mid = (left + right) // 2

        # 递归地找出左半部分和右半部分的最大子数组和
        max_sum_left = max_subarray_sum_recursive(nums, left, mid)
        max_sum_right = max_subarray_sum_recursive(nums, mid + 1, right)

        # 找出横跨两部分的最大子数组和
        max_sum_crossing = max_crossing_sum(nums, left, mid, right)

        # 返回左半部分、右半部分和横跨两部分的最大子数组和中的最大值
        return max(max_sum_left, max_sum_right, max_sum_crossing)

    # 辅助函数，用于找出横跨两部分的最大子数组和
    def max_crossing_sum(nums, left, mid, right):
        # 从中间向左扩展，找到左边的最大和
        max_sum_left = float('-inf')
        current_sum = 0
        for i in range(mid, left - 1, -1):
            current_sum += nums[i]
            max_sum_left = max(max_sum_left, current_sum)

        # 从中间向右扩展，找到右边的最大和
        max_sum_right = float('-inf')
        current_sum = 0
        for i in range(mid + 1, right + 1):
            current_sum += nums[i]
            max_sum_right = max(max_sum_right, current_sum)

        # 返回横跨两部分的最大子数组和
        return max_sum_left + max_sum_right

    # 调用辅助函数，开始递归
    return max_subarray_sum_recursive(nums, 0, len(nums) - 1)